package org.spring.core;

/**
 * {@code Ordered} 是一个接口，可以由应该是 <em>orderable<em> 的对象实现，例如在 {@code Collection} 中。
 * <p>
 * 实际的 {@link #getOrder() order} 可以解释为优先级，第一个对象（具有最低 order 值）具有最高优先级。
 * <p>
 * 请注意，此接口还有一个 <em>priority<em> 标记：{@link PriorityOrdered}。
 * 有关 {@code PriorityOrdered} 对象如何相对于 <em>plain<em> {@link Ordered} 对象排序的详细信息，请参阅 {@code PriorityOrdered} 的 Javadoc。
 * <p>
 * 有关无序对象的排序语义的详细信息，请参阅 {@link OrderComparator} 的 Javadoc。
 *
 * @author 李坤
 * @date 2022/4/19 16:59
 */
public interface Ordered {

    /**
     * 最高优先级值的有用常量。
     *
     * @see Integer#MIN_VALUE
     */
    int HIGHEST_PRECEDENCE = Integer.MIN_VALUE;

    /**
     * 用于最低优先级值的有用常量。
     *
     * @see Integer#MAX_VALUE
     */
    int LOWEST_PRECEDENCE = Integer.MAX_VALUE;


    /**
     * 获取此对象的 order 值。
     * <p>
     * 较高的值被解释为较低的优先级。因此，具有最低值的对象具有最高优先级（有点类似于 Servlet {@code load-on-startup} 值）。
     * <p>
     * 相同的顺序值将导致受影响对象的任意排序位置。
     *
     * @return the order value
     *
     * @see #HIGHEST_PRECEDENCE
     * @see #LOWEST_PRECEDENCE
     */
    int getOrder();

}
